package proyectoFC_2_3_3.koyicabuto;

import proyectoFC_2_3_3.koyicabuto.BaseDeDatos.GruposDataBase;
import proyectoFC_2_3_3.koyicabuto.funciones.Funciones;
import proyectoFC_2_3_3.koyicabuto.funciones.FuncionesBaseDatos;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;

public class TabDatosGrupoActivity extends Activity{
	
	//Base de Datos
	private SQLiteDatabase gruposDataBase;
	
	//Funciones genericas
	private FuncionesBaseDatos funcionesBaseDatos = new FuncionesBaseDatos();
	private Funciones funciones = new Funciones();
	
	private Long idGrupoSeleccionado = null;
	
	//EditText
	private EditText nombre;
	private EditText descripcion;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabdatosgrupo);
        
        this.nombre = (EditText)findViewById(R.id.Nombre);
        this.descripcion = (EditText)findViewById(R.id.Descripcion);
        
        //Obtenemos las variables que vienen de GruposListViewActivity
		Bundle extras = getIntent().getExtras();
		if(extras != null){
			idGrupoSeleccionado = extras.getLong("idGrupoSeleccionado");
			if(idGrupoSeleccionado != null){
				cargaDatosGrupoSeleccionado(idGrupoSeleccionado);
			}
		}
    }
	
	private void cargaDatosGrupoSeleccionado(Long idGrupoSelecc){
		boolean error = true;
		String[] parametros = new String[]{idGrupoSelecc.toString()};
		String selectGrupo = "SELECT GR_NOMBRE, GR_DESCRIPCION FROM GRUPOS WHERE _id = ? ";
		
		String nombreGrupo = null;
		String descripcionGrupo = null;
		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(this, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();	
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectGrupo, parametros);

				if(cursor.moveToFirst()){
					do{
						nombreGrupo = cursor.getString(0);
						descripcionGrupo = cursor.getString(1);
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
			}			
			error = false;
		}catch (Exception e) {
			error = true;
			System.out.println("Excepcion al guardar: " +e.getMessage());
		}
		
		if(error){
			crearDialogoAlerta("ERROR", "Al conectar con la BB.DD");
		}else{
			this.nombre.setText(nombreGrupo);
			this.descripcion.setText(descripcionGrupo);
		}
	}
	
	public void onClickEliminar(View view){
		AlertDialog alertDialog = new AlertDialog.Builder(this).create();

	    alertDialog.setTitle(null);
	    alertDialog.setMessage("¿Desea eliminar el grupo seleccionado y todas las personas que tiene agregadas?");
	    alertDialog.setButton("Cancelar", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        }
	    });
	    alertDialog.setButton2("Eliminar", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        	eliminaGrupo(idGrupoSeleccionado);
	        }
	    });
	    alertDialog.show();	 
	}
	
	public void eliminaGrupo(Long idGrupo){
		boolean error = false;
		
		gruposDataBase = funcionesBaseDatos.conectaWritableBaseDeDatos(this);		
		
		try{
			if(gruposDataBase != null){
				gruposDataBase.execSQL("DELETE FROM  PERSONAL_GRUPOS WHERE PG_GR_ID = " + idGrupo) ;
				gruposDataBase.execSQL("DELETE FROM  GRUPOS WHERE _id = " + idGrupo) ;
				
				funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
			}
		}catch (Exception e) {
			error = true;
			System.out.println("Excepcion en eliminaGrupo: " +e.getMessage());
		}
		if(!error){
			Toast.makeText(this, "Grupo: " + this.nombre.getText().toString() + " eliminado correctamente.", Toast.LENGTH_SHORT).show();
		}
	}
	
	public void onClickBotonGuardar(View view){
		String nombre = this.nombre.getText().toString();
		String descripcion = this.descripcion.getText().toString();
		
		actualizaGrupo(nombre, descripcion, view);
	}
	
	public void onClickBotonVolver(View view){
		Intent i = new Intent(this, ListaGruposActivity.class);
		startActivity(i);
	}
	
	/**
	 * Metodo con el que gurdamos un nuevo grupo y en el caso de que no halla error mostramos un dialogo de corercto.
	 * @param nombre
	 * @param descripcion
	 */
	private void actualizaGrupo(String nombre, String descripcion, View view){
		if(validaGuardarGrupo()){
			boolean error = false;

			gruposDataBase = funcionesBaseDatos.conectaWritableBaseDeDatos(this);		
			
			try{
				if(gruposDataBase != null){
					gruposDataBase.execSQL("UPDATE GRUPOS SET GR_NOMBRE = '" + this.nombre.getText().toString() + 
										   "', GR_DESCRIPCION = '" + this.descripcion.getText().toString() + 
										   "' where _id = " + idGrupoSeleccionado + " ") ;
					funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
				}
			}catch (Exception e) {
				error = true;
				System.out.println("Excepcion al guardar: " +e.getMessage());
			}
			if(!error){
				ocultarTecladoVirtual(view);
				Toast.makeText(this, "Grupo: " + this.nombre.getText().toString() + " actualizado correctamente.", Toast.LENGTH_SHORT).show();
			}
		}
	}
	
	private boolean validaGuardarGrupo(){
		boolean validado = false;
		boolean error = false;
		
		if(nombre.getText() == null || nombre.getText().toString().isEmpty()){
			funciones.crearDialogoAlerta("Error", "Debe rellenar el campo Nombre.", this);
		}else{
			//Comprobamos que no haya un grupo en la BB:DD con el mismo nombre
			int contador = Integer.valueOf(0);
			String[] parametros = new String[]{nombre.getText().toString()};
			String selectGrupo = "SELECT COUNT(GR_NOMBRE) FROM GRUPOS WHERE UPPER(GR_NOMBRE) = UPPER(?) AND _id <> " + idGrupoSeleccionado;
			gruposDataBase = funcionesBaseDatos.conectaBaseDeDatos(this);
			
			try{
				if(gruposDataBase != null){
					
					Cursor cursor = gruposDataBase.rawQuery(selectGrupo, parametros);

					if(cursor.moveToFirst()){
						do{
							contador = cursor.getInt(0);
						}while(cursor.moveToNext());
					}
					funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
				}
				
			}catch (Exception e) {
				validado = false;
				error = true;
			}
			
			if(!error && contador > 0){
				funciones.crearDialogoAlerta("Error", "Ya existe un Grupo cuyo nombre es " + nombre.getText().toString() + ", " +
						 					 "introduzca un nombre diferente para el grupo.", this);
			}else{
				validado = true;
			}
		}		
		return validado;
	}
	
	public void ocultarTecladoVirtual(View view){
		
		descripcion.clearFocus();
		nombre.clearFocus();
		
		InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
	}
	
	/**
	 * Metodo con el que mostramos un diálogo de alerta en el caso de que se guarde correctamente un nuevo grupo.
	 */
	private void crearDialogoAlerta(String titulo, String mensaje)
	{
	    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
	 
	    alertDialog.setTitle(titulo);
	    alertDialog.setMessage(mensaje);
	    alertDialog.setButton("OK", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        }
	    });
	    alertDialog.show();	 
	}
}
